It is well-known that large software systems, for example, software for controlling a large telecommunication system is complex and costly to build. In an effort to alleviate this problem, large software systems are commonly divided into segments or components. However, the various components of todays large software systems are tied inextricably to one another by dependencies which cause a great deal of coordination and negotiation among the developers of the software system and often force them to synchronize their work efforts, slowing down the development of a project. Typically, the developer must investigate syntactic issues such as how a particular global data structure is laid out or what order of arguments another developer's function demands. Such interdependencies add to the cost and the development time of the large and complex systems. Before a program can be loaded into a machine it must be compiled, that is, converted from the source code format in which the programmer typically writes the program to the object code format which will be recognized by the machine. Compiling includes computing proper addresses of other programs and data areas with which the compiled program communicates. Thus, compiling cannot be done until all associated programs are fully defined. Similarly, a single developer's compiled program cannot be tested on the machine until all the other programs with which this program communicates have been written and are functioning on the same machine. Similar restrictions are in effect when a change is made in a program. For example, when a change is made to a program component which is used by other program components, the other programs which are dependent on the revised component must be recompiled as well. To properly integrate a change in conventional systems, the entire system program should be recompiled, although certain limited changes can sometimes be made. In large systems compiling can usually be done only on off-line computers. Thus, it is difficult and time consuming to introduce changes in a large program controlled system such as a telecommunications switching system after it has been installed in the field. The interdependencies of program components which are found in present day systems were recognized many years ago as adding to the complexities, time and costs of developing or modifying a complex software system. Some but not all of the problems of interdependency are solved by the known LISP language. However, LISP is generally not considered to be slow for real time systems. Today it is recognized that software absorbs more than 80 percent of development time and cost of a major computer based system. Accordingly, improvements in software technology are greatly sought after.